#ifndef __CARIOU_LINARD_CUBE_HH__
#define __CARIOU_LINARD_CUBE_HH__

#include "solidobject.h"

class Cube : public SolidObject
{
    protected:

        Vector3D X;
        Vector3D Y;
        Vector3D Z;

        double size;

        bool isInside(const Point3D &) const;
        bool isInside(Intersection &)  const;

        void intersectionX(const Ray &ray,Intersection &inter) const;
        void intersectionY(const Ray &ray,Intersection &inter) const;
        void intersectionZ(const Ray &ray,Intersection &inter) const;

    public:

        Cube();
        virtual ~Cube();
        Cube(const Cube &);
        virtual Cube& operator=(const Cube &);

        Cube(const Point3D &, const Color &, const Vector3D &, const Vector3D &, const Vector3D &, const double &);

        virtual void texturing(const Intersection &);
        virtual void intersection(const Ray &,Intersection &) const;
        virtual void getNormalVectorAt(const Point3D &, Vector3D &) const;
};

#endif
